--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 683b3f3619354f600af26f41a7f81805a60bd0d6
Parents : 26bb3bf
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-07-13T10:41:47-05:00
refactor: improve tree-manifest.sh by simplifying file listing and sorting logic
Changes
Diff
diff --git a/scripts/ci/tree-manifest.sh b/scripts/ci/tree-manifest.sh
index c6d41a08..2cfe679e 100755
--- a/scripts/ci/tree-manifest.sh
+++ b/scripts/ci/tree-manifest.sh
@@ -7,6 +7,9 @@
#
# meshchatx.rsm is excluded from the inventory (avoids a self-hash cycle).
#
+# Paths are listed via newline-delimited git ls-files (POSIX sh / dash safe).
+# Do not use read -d or sort -z (bash/GNU-only).
+#
# Usage:
# tree-manifest.sh generate write inventory to stdout
# tree-manifest.sh verify [inventory] verify against file or stdin
@@ -41,9 +44,14 @@ index_sha256() {
git show ":$f" | file_sha256_stream
}
+tracked_paths() {
+ git ls-files | LC_ALL=C sort
+}
+
generate() {
printf '%s\n' "$MANIFEST_HEADER"
- git ls-files -z | sort -z | while IFS= read -r -d '' f; do
+ tracked_paths | while IFS= read -r f; do
+ [ -n "$f" ] || continue
[ "$f" = "$EXCLUDE_RSM" ] && continue
if ! git cat-file -e ":$f" 2>/dev/null; then
continue
@@ -83,7 +91,7 @@ verify() {
tmp_expect="${tmp}.expect"
tmp_actual="${tmp}.actual"
# Drop header and blank lines. normalize to "hash path"
- sed '1d;/^$/d;/^#/d' "$tmp" | awk 'NF>=2 {print $1 " " substr($0, index($0,$2))}' | sort -k2 >"$tmp_expect"
+ sed '1d;/^$/d;/^#/d' "$tmp" | awk 'NF>=2 {print $1 " " substr($0, index($0,$2))}' | LC_ALL=C sort -k2 >"$tmp_expect"
fail=0
while IFS= read -r line; do
@@ -107,14 +115,15 @@ verify() {
if [ "$check_tracked" = "1" ]; then
tmp_tracked="${tmp}.tracked"
: >"$tmp_tracked"
- git ls-files -z | sort -z | while IFS= read -r -d '' f; do
+ tracked_paths | while IFS= read -r f; do
+ [ -n "$f" ] || continue
[ "$f" = "$EXCLUDE_RSM" ] && continue
[ -f "$f" ] || continue
[ -L "$f" ] && continue
printf '%s\n' "$f"
- done | sort >"$tmp_tracked"
+ done | LC_ALL=C sort >"$tmp_tracked"
- awk '{print substr($0, index($0,$2))}' "$tmp_expect" | sort >"$tmp_actual"
+ awk '{print substr($0, index($0,$2))}' "$tmp_expect" | LC_ALL=C sort >"$tmp_actual"
extra="$(comm -13 "$tmp_tracked" "$tmp_actual" || true)"
missing="$(comm -23 "$tmp_tracked" "$tmp_actual" || true)"
if [ -n "$extra" ]; then
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────